[pull] main from MetaMask:main#345
Merged
Merged
Conversation
…ing `getNetworkImageSource` (#23089) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Incorrect Network (Solana) is displayed on dapp browsing when I have Bitcoin/ or Tron selected in my wallet, because current logic either renders EVM selected network, or defaults to Solana when something other than EVM is selected. This PR proposes a fix to handle non EVM networks accordingly. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Add logic to compute the correct non-EVM network image source using `getNetworkImageSource` ## **Related issues** Fixes: #22787 ## **Manual testing steps** ```gherkin Feature: Non EVM Image for AccountRightButton Component Scenario: user selects non evm network Given he does so in In App Browser When user selects non evm network via In App Browser AccountRightButton Then the correct network image should be displayed ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** https://github.com/user-attachments/assets/e2d114cb-2a99-497b-9417-ee7877e98fc7 <!-- [screenshots/recordings] --> ### **After** https://github.com/user-attachments/assets/5ca5dc99-e94a-41e3-a48c-371762a7320c <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Computes the proper non-EVM network image using getNetworkImageSource and replaces the hardcoded Solana fallback in AccountRightButton. > > - **UI**: > - **AccountRightButton (`app/components/UI/AccountRightButton/index.tsx`)**: > - Compute non-EVM network image via `useMemo` and `getNetworkImageSource` using `selectedNonEvmNetworkChainId`. > - Replace hardcoded Solana fallback with computed `imageSource`; EVM logic unchanged. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2851891. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…3064) ## **Description** Reduce loading time when starting Perps and Predict deposit confirmations. ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: [#6162](MetaMask/MetaMask-planning#6162) [#6165](MetaMask/MetaMask-planning#6165) ## **Manual testing steps** ## **Screenshots/Recordings** ### **Before** ### **After** ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Speeds up confirmation flows with memoization and streamlined pay-token logic, adds safer Perps/Predict transaction options, updates alerts/UI, and bumps transaction-controller. > > - **Confirmations/Pay UX & Performance**: > - Memoize calculations in `useGasFeeToken`, `useTokenAmount`, and `pay-token-amount` with skeleton fallback; reduce recomputations and unnecessary renders. > - Refactor `useAutomaticTransactionPayToken` to use `useTransactionPayAvailableTokens`, simplify selection logic, and remove count-return path; update related tests. > - Update `useTransactionPayMetrics` to derive payment token list size from available tokens and drop dependency on automatic selector. > - Improve `useTransactionPayToken` by making gas estimate fetch non-blocking and flushing Engine state immediately. > - Tighten recipient detection in `useTransferRecipient` to explicit transfer types only. > - **Perps/Predict Transactions**: > - Perps deposit: add `skipInitialGasEstimate: true` when calling `TransactionController.addTransaction`; test updated. > - Predict deposit: add `disableUpgrade: true` and `skipInitialGasEstimate: true` to `addTransactionBatch` options; tests updated. > - Safe utils: mark generated proxy/allowance/claim transactions as `TransactionType.contractInteraction`. > - **Alerts & Localization**: > - `useInsufficientPayTokenBalanceAlert`: handle zero/negative target amounts with alternate copy; add `insufficient_pay_token_balance_fees_no_target` locale string. > - **Engine**: > - `EngineService`: flush Redux updates immediately for `ApprovalController` and expose `flushState()`. > - **Dependencies**: > - Bump `@metamask/transaction-controller` to `62.1.0` (package.json and yarn.lock). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f7c039c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Upgrading tron to `1.10.0` https://github.com/MetaMask/snap-tron-wallet/releases/tag/v1.10.0 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: #22889 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is generating a summary for commit cfa573a. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
#23105) ## **Description** Fixed bottom padding in the Perps tab view where the "Start trading" button was overlapping with the bottom navigation's "+" action button, particularly noticeable on Android. Increased bottom padding from 12px to 20px for both the positions/orders view and empty state to provide adequate clearance. **Changes:** - Updated `tradeInfoContainer` style: paddingBottom from 12 to 30 - Added `emptyStateContainer` style with paddingBottom: 30 - Wrapped `PerpsEmptyState` component with styled View to apply consistent padding ## **Changelog** CHANGELOG entry: Fixed bottom padding in Perps tab to prevent overlap with bottom navigation button ## **Related issues** Fixes: <!-- Add issue number if applicable --> ## **Manual testing steps** ```gherkin Feature: Perps tab bottom padding Scenario: user views Perps tab with positions/orders Given user has open positions or orders in the Perps tab When user navigates to the Perps tab Then the "Start trading" button should have adequate clearance from the bottom navigation And the button should not overlap with the "+" action button Scenario: user views empty Perps tab Given user has no positions or orders When user navigates to the Perps tab Then the empty state should have adequate clearance from the bottom navigation And content should not overlap with the "+" action button ``` ## **Screenshots/Recordings** ### **Before** <!-- Android: Start trading button overlapping with + button --> <img width="397" height="376" alt="image" src="https://github.com/user-attachments/assets/1df51259-b43f-4f5f-99ec-e415e7fbad17" /> <!-- iOS: Tight spacing with + button --> <img width="412" height="476" alt="image" src="https://github.com/user-attachments/assets/3e2ae99e-ec12-4a9d-967a-b7e5b815c243" /> ### **After** <!-- Android: 20px clearance from + button --> <!-- iOS: 20px clearance from + button (consistent with Android) --> <img width="397" height="432" alt="image" src="https://github.com/user-attachments/assets/221fe494-181a-4122-924b-0107ee8b7f8c" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Increase bottom padding for trade info and empty states in `PerpsTabView` and wrap empty state in a padded container to avoid overlap with bottom navigation. > > - **UI (PerpsTabView)**: > - **Padding adjustments**: > - `tradeInfoContainer` `paddingBottom`: `12` -> `30` in `app/components/UI/Perps/Views/PerpsTabView/PerpsTabView.styles.ts`. > - Add `emptyStateContainer` with `paddingBottom: 30`. > - **Empty state layout**: > - Wrap `PerpsEmptyState` in a `View` using `styles.emptyStateContainer` in `app/components/UI/Perps/Views/PerpsTabView/PerpsTabView.tsx` to apply consistent bottom spacing. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f5dc7ad. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…3057) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Adds error and unsupported routing handling to the `useRampNavigation` hook. The `goToBuy` function now checks the routing decision first and navigates to the appropriate modal when the routing decision is `ERROR` or `UNSUPPORTED`, before any other routing logic executes. **Changes:** - Added imports for `createEligibilityFailedModalNavigationDetails` and `createRampUnsupportedModalNavigationDetails` - Added early return checks in `goToBuy` to handle `UnifiedRampRoutingType.ERROR` and `UnifiedRampRoutingType.UNSUPPORTED` routing decisions - When `ERROR` is detected, navigates to the eligibility failed modal - When `UNSUPPORTED` is detected, navigates to the unsupported region modal This ensures users see appropriate error messages when ramp services are unavailable or unsupported in their region, rather than attempting to navigate to unavailable flows. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Added error and unsupported region handling to ramp navigation flow ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: Ramp navigation error handling Scenario: user attempts to buy when routing decision is ERROR Given the app has a routing decision of ERROR When user triggers the buy flow Then the eligibility failed modal should be displayed Scenario: user attempts to buy when routing decision is UNSUPPORTED Given the app has a routing decision of UNSUPPORTED When user triggers the buy flow Then the unsupported region modal should be displayed ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** https://github.com/user-attachments/assets/6eb13363-2412-481b-b268-3ef1c3a58070 https://github.com/user-attachments/assets/5ffd32ef-6798-41a0-b868-dc258bb1b294 <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds early routing in `useRampNavigation.goToBuy` to show eligibility-failed or unsupported modals when unified V1 is enabled, with accompanying tests. > > - **Hook updates** > - In `app/components/UI/Ramp/hooks/useRampNavigation.ts`: > - `goToBuy` now checks `UnifiedRampRoutingType` first under unified V1. > - Routes to `createEligibilityFailedModalNavigationDetails()` on `ERROR` and to `createRampUnsupportedModalNavigationDetails()` on `UNSUPPORTED` (early return). > - Preserves existing token selection and smart routing for `DEPOSIT` vs `AGGREGATOR` when an `assetId` is present. > - **Tests** > - In `app/components/UI/Ramp/hooks/useRampNavigation.test.ts`: > - Adds test coverage for `ERROR` and `UNSUPPORTED` decisions navigating to the respective modals (with and without intent). > - Retains tests for token selection and smart routing behaviors. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7e686bb. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
….60.0 (#23102) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Fixed an issue where the `filterTabs` array in `PerpsTransactionsView` was using translated strings, which could cause mismatches with the filter logic that expects hardcoded values ('Trades', 'Orders', 'Funding', 'Deposits'). ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Fixed an issue where orders, and deposits would not show if the user is not using english locale ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2093 ## **Manual testing steps** ```gherkin Feature: Perps Transactions View Filter Tabs Scenario: user switches between transaction filter tabs Given the user is on the Perps Transactions screen And the user uses French language And the user has transaction history data When user taps on the "Orders" tab Then the Orders filter should be active And only order transactions should be displayed When user taps on the "Funding" tab Then the Funding filter should be active And only funding transactions should be displayed When user taps on the "Deposits" tab Then the Deposits filter should be active And only deposit/withdrawal transactions should be displayed When user taps on the "Trades" tab Then the Trades filter should be active And only trade transactions should be displayed ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/53fd37db-a03c-4b68-985b-68d3beab20a7 ### **After** <!-- [screenshots/recordings] --> <img width="1170" height="2532" alt="Simulator Screenshot - iPhone 16e - 2025-11-21 at 13 02 25" src="https://github.com/user-attachments/assets/aaa03b7f-746c-46ab-b471-87c2e176ed70" /> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Use static `['Trades','Orders','Funding','Deposits']` for `filterTabs` in `PerpsTransactionsView` to align with `FilterTab` and avoid locale mismatches. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 22cf93d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR updates the Deposit BuildQuote screen title from "Deposit" to "Buy" to better align with user-facing terminology and improve clarity of the feature's purpose. **Context**: As part of TRAM-2853, we're standardizing the naming across the ramps experience. The Deposit feature is fundamentally a "buy crypto" flow, so the title should reflect that action. **Changes**: - Updated `deposit.buildQuote.title` in `locales/languages/en.json` from "Deposit" to "Buy" - Updated test snapshots to reflect the title change ## **Changelog** CHANGELOG entry: Changed Deposit BuildQuote screen title to "Buy" ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-2855 Refs: https://consensyssoftware.atlassian.net/browse/TRAM-2853 ## **Manual testing steps** ```gherkin Feature: Deposit BuildQuote Title Scenario: user views the Deposit BuildQuote screen Given the user has opened MetaMask Mobile And the user navigates to the Deposit flow When the user reaches the BuildQuote screen Then the screen title should display "Buy" instead of "Deposit" ``` ## **Screenshots/Recordings** ### **Before** <img width="300" alt="image" src="https://github.com/user-attachments/assets/94e7a4fe-c74d-4fdb-ac57-eb0368deb36b" /> ### **After** <img width="300" alt="image" src="https://github.com/user-attachments/assets/a13043e8-2dfc-4c1b-83fc-2256e32b9b4a" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Renames the Ramp BuildQuote screen title from "Deposit" to "Buy" and updates corresponding snapshots and localization. > > - **Localization**: > - Update `deposit.buildQuote.title` in `locales/languages/en.json` from `"Deposit"` to `"Buy"`. > - **Tests**: > - Refresh `BuildQuote` snapshots to reflect UI text change from `"Deposit"` to `"Buy"` in `app/components/UI/Ramp/Deposit/Views/BuildQuote/__snapshots__/BuildQuote.test.tsx.snap`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ab0383d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…gated balance (#23113) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** fix aggregated balances on mobile core PR: MetaMask/core#7216 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix missing native token balances in wallet balance ## **Related issues** Fixes: #22775 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Patches @metamask/assets-controllers to lowercase account addresses when updating token balances, resolving missing aggregated balances. > > - **Assets Controllers Patch**: > - Normalize account addresses to lowercase in `dist/TokenBalancesController.{cjs,mjs}` when reading/writing `d.tokenBalances[account]` to ensure balance updates persist. > - **Dependencies**: > - Switch `@metamask/assets-controllers@89.0.1` to a Yarn `patch:` source in `package.json` and register the patch in `yarn.lock` (`.yarn/patches/@metamask-assets-controllers-npm-89.0.1-02fa7acd54.patch`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 0fb1c03. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR updates the copy for the Sell/Withdraw functionality in the Ramps flow to improve clarity and consistency across the application. **What is the reason for the change?** The current implementation uses "Withdraw" terminology in various places when referring to the sell crypto functionality. This can be confusing for users as "Withdraw" typically implies moving funds from one account to another, rather than selling crypto for cash. **What is the improvement/solution?** Updated all user-facing strings to consistently use "Sell" instead of "Withdraw" for the sell crypto flow: 1. Fund Action Menu button and description 2. Asset Overview sell button 3. Build Quote screen titles (simplified from "Amount to buy/sell" to just "Buy/Sell") This creates a clearer mental model for users and aligns with the actual functionality - selling crypto for cash. ## **Changelog** CHANGELOG entry: Changed "Withdraw" to "Sell" in the Fund Action Menu and Asset Overview for improved clarity. ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-2854 (subtask of https://consensyssoftware.atlassian.net/browse/TRAM-2853) ## **Manual testing steps** ```gherkin Feature: Sell button copy changes Scenario: User views Fund Action Menu Given user is on the Wallet screen And user has a token with balance When user taps the "Buy" button on a token Then the Fund Action Menu should display And the sell option should read "Sell" (not "Withdraw") And the description should read "Sell crypto for cash" Scenario: User navigates to Build Quote for Sell Given user is on the Wallet screen And user has opened the Fund Action Menu When user taps the "Sell" button Then the Build Quote screen should open And the header title should display "Sell" (not "Amount to sell") Scenario: User navigates to Build Quote for Buy Given user is on the Wallet screen And user has opened the Fund Action Menu When user taps the "Buy" button Then the Build Quote screen should open And the header title should display "Buy" (not "Amount to buy") ``` ## **Screenshots/Recordings** | **Before** | **After** | |------------|-----------| | **Fund Action Menu - "Withdraw" button** | **Fund Action Menu - "Sell" button** | | <img width="300" alt="image" src="https://github.com/user-attachments/assets/3de0e566-499b-46b5-8a14-4f3773c459b9" /> | <img width="300" alt="image" src="https://github.com/user-attachments/assets/1ba9354e-74f8-439c-8a1f-ba3c95dd9ae8" /> | | **Asset Overview - "Withdraw" button** | **Asset Overview - "Sell" button** | | <img width="300" alt="image" src="https://github.com/user-attachments/assets/bedbab7c-ee06-4131-a149-3e3c90c67052" /> | <img width="300" alt="image" src="https://github.com/user-attachments/assets/6a60c1ef-4ae5-4b56-a070-f99987b39d74" /> | | **Build Quote - "Amount to buy" title** | **Build Quote - "Buy" title** | | <img width="300" alt="image" src="https://github.com/user-attachments/assets/89559466-ec4b-4552-b878-19a778746901" /> | <img width="300" alt="image" src="https://github.com/user-attachments/assets/a71ffc50-ed6e-40af-8be5-636c170b7b71" /> | | **Build Quote - "Amount to sell" title** | **Build Quote - "Sell" title** | | <img width="300" alt="image" src="https://github.com/user-attachments/assets/cd1f863c-7a2b-4315-a49a-0c15d7005be5" /> | <img width="300" alt="image" src="https://github.com/user-attachments/assets/116cc053-14a9-41e0-a7b8-295a833701a1" /> | ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Replaces "Withdraw" with "Sell" across ramp UI strings and updates Build Quote headers from "Amount to buy/sell" to "Buy/Sell", with snapshots refreshed. > > - **i18n (en)**: > - Update `fund_actionmenu.sell` and `asset_overview.sell_button` from `Withdraw` to `Sell` in `locales/languages/en.json`. > - Simplify Build Quote labels: `fiat_on_ramp_aggregator.amount_to_buy` -> `Buy`, `amount_to_sell` -> `Sell`. > - **UI tests**: > - Refresh snapshots in `app/components/UI/Ramp/Aggregator/Views/BuildQuote/__snapshots__/BuildQuote.test.tsx.snap` reflecting title changes from `Amount to buy/sell` to `Buy/Sell`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 93c5b2d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description**
This PR updates the README.md to improve branding consistency and visual
presentation:
1. **Updated main heading**: Changed from "MetaMask" to "MetaMask
Mobile" to better reflect that this is the mobile repository
2. **Refined logo display**: Converted the logo from markdown image
syntax to HTML `<img>` tag with a fixed width of 50px for better size
control and consistency
These changes improve the README's visual hierarchy and make it
immediately clear that this is the MetaMask Mobile repository.
## **Changelog**
CHANGELOG entry: null
## **Related issues**
Refs:
## **Manual testing steps**
```gherkin
Feature: README documentation
Scenario: user views the repository README
Given the user navigates to the repository on GitHub
When the user views the README.md
Then the logo should display at 50px width
And the main heading should read "MetaMask Mobile"
```
## **Screenshots/Recordings**
### **Before**
- Large logo using markdown syntax
- Heading: "MetaMask"
### **After**
- Compact logo (50px) using HTML img tag
- Heading: "MetaMask Mobile"
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Update README: switch logo to 50px HTML image and rename main heading
to “MetaMask Mobile.”
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a8669a1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )